//package com.mango.demo.async;
//
//import org.junit.Test;
//
//import java.util.concurrent.*;
//
///**
// * @Author：wlz
// * @Package：com.mango.demo.async
// * @Project：mangodemo
// * @name：CallableAndFuture
// * @Date：2023/3/29 22:35
// * @Filename：CallableAndFuture
// */
//public class CallableAndFuture {
//
//    @Test
//    public void futureTest() throws Exception {
//
//        System.out.println("main函数开始执行");
//
//        ExecutorService executor = Executors.newFixedThreadPool(1);
//        Future<Integer> future = executor.submit(new Callable<Integer>() {
//            @Override
//            public Integer call() throws Exception {
//
//                System.out.println("===task start===");
//                Thread.sleep(5000);
//                System.out.println("===task finish===");
//                return 3;
//            }
//        });
//        //这里需要返回值时会阻塞主线程，如果不需要返回值使用是OK的。倒也还能接收
//        //Integer result=future.get();
//        System.out.println("main函数执行结束");
//
//        System.in.read();
//
//    }
//    @Test
//    public void futureTaskTest() throws Exception {
//        ExecutorService executor = Executors.newCachedThreadPool();
//// FutureTask包装callbale任务，再交给线程池执行
//        FutureTask<Integer> futureTask = new FutureTask<>(() -> {
//            System.out.println("子线程开始计算：");
//            Integer sum = 0;
//            for (int i = 1; i <= 100; i++)
//                sum += i;
//            return sum;
//        });
//
//// 线程池执行任务， 运行结果在 futureTask 对象里面
//        executor.submit(futureTask);
//
//        try {
//            System.out.println("task运行结果计算的总和为：" + futureTask.get());
//        } catch (Exception e) {
//            e.printStackTrace();
//        }
//        executor.shutdown();
//        System.out.println(Runtime.getRuntime().availableProcessors());
//    }
//
//}
